/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
$(document).ready(function() {
    user.init();
});

var user = (function() {
    
    function addGroup() {
        var u = $('#groupName').val();

        $('#userInput .form-group').removeClass('has-error');
        $('#userAlert').hide().html('');    
        if(!u) {
            $('#groupName').parents('.form-group').addClass('has-error');
            $('#addGroup').find('i.fa').attr('class', 'fa fa-plus-circle');
            return false;
        }
                  
         $('#userInput').ajaxSubmit({
            url: '/usergroup/ajax-add-group',
            type: 'post',
            dataType: 'json',
            timeout: 3000,
            success: function(resp) {
                if (resp.err === 0) {
                    var data = resp.data;
//                    html = '<tr>\
//								<td class="name">\
//									<a data-title="Tên group" href="/usergroup/edit?id=' + data.id + '" class="user_name">\
//										' + u + '\
//									</a>\
//								</td>\
//								<td class="text-center">\
//									<a href="#" class="text-danger pull-right" onclick="return user.deleteUserGroup(this, \'' + data.id + '\')"><i class="fa fa-trash-o"></i></a>\
//								</td>\
//							</tr>';
//                    $('#listGroup').find('tbody').prepend(html);
//                    $('#groupName').html('');   
                    
                    window.location.href = '/usergroup/edit?id=' + resp.data.id + '#msg=' + resp.msg;
                } else {
                    $('#userAlert').show().html(resp.msg);
                }
                $('#addGroup').find('i.fa').attr('class', 'fa fa-plus-circle');
            }
        });                
    }
    
    
    function editGroup(){
        var groupName = $('#groupName').val();
        
        $('.form-group').removeClass('has-error');
        $('.errorHandler').html('');
        if (!groupName) {
            $('#groupName').parents('.form-group').addClass('has-error');
            $('#editGroup').find('i.fa').attr('class', 'fa fa-plus-circle');
            return false;
        }
                
        $('#userInput').ajaxSubmit({
            url: '/usergroup/ajax-edit-group',
            type: 'post',
            dataType: 'json',
            timeout: 3000,
            success: function(resp) { 
                if (resp.err === 0) {
                    $('#editGroup').find('i').attr('class','fa fa-save');
                    $('.errorHandler').html('<small><small><strong class="text-success">' + resp.msg + '</strong></small></small>').show();                    
                } 
                else {
                    $('.errorHandler').html('<small><small><strong class="text-danger">' + resp.msg + '</strong></small></small>').show();
                }
            }
        });
    }
    
    
    function deleteGroup(id, groupName, callback){
        showConfirm({
            msg: 'Bạn có chắc chắn muốn xoá nhóm người dùng này không? <strong class="text-danger">' + groupName +'</strong>',
            title: 'Xóa nhóm người dùng',
            noBt: 'Đóng',
            yesBt: 'Đồng ý xoá',
            onYes: function() { 
                $.post('/usergroup/ajax-delete-group', {id: id}, function(resp) {
                    if(resp.err === 0){
                        callback();
                        hideConfirm();
                    }else {
                         hideConfirm();
                        $('.errorHandler').removeClass('text-success').addClass('text-danger').html(resp.msg).show();
                    }
                }, 'json');
            }
        });
    }
    
    
    function initHandler() {
        $('#addGroup').click(function() {
            $(this).find('i.fa').attr('class', 'fa fa-spinner fa-spin');
            addGroup();
            return false;
        });
        
        
        $('#editGroup').click(function() {
            $(this).find('i.fa').attr('class', 'fa fa-spinner fa-spin');
            editGroup();
            return false;
        });
        
        
        $('#deleteGroup').click(function() {
            var id = $('#groupID').val(),
                groupName = $('#groupName').val();
            deleteGroup(id, groupName, function() {
                window.location.href='/usergroup';
            });
            return false;
        });
        
        
        var hash = window.location.hash;
        if(hash.indexOf('#msg=') > -1){
            $('.errorHandler').html(hash.substring(5)).show();
            window.location.hash = '';
        }
    }
    
    function initUserAccessHandler() {
        $('#lstAccess input.parentCheck').click(function() {
            var chk = $(this),
                tr = $(this).parents('tr'),
                ischk = chk.prop('checked');
            while(true) {
                tr = tr.next();
                if(!tr) {
                    break;
                }
                
                chk = tr.find('input[type=checkbox]');
                if(!chk.hasClass('childCheck'))
                    break;
                chk.prop('checked', ischk);
            }
        });
        
        $('#lstAccess input.childCheck').click(function() {
            var chk = $(this),
                tr = $(this).parents('tr'),
                ischk = chk.prop('checked');
            if(!ischk)    
                return;
            
            while(true) {
                tr = tr.prev();
                if(!tr) {
                    break;
                }
                
                chk = tr.find('input[type=checkbox]');
                if(ischk && chk.hasClass('parentCheck')) {
                    chk.prop('checked', ischk);
                    break;
                }
            }
        });
    }
    
    return {
        init: function() {
            initHandler();
            initUserAccessHandler();
        },
        
        deleteGroup: function(groupId, groupName, obj){
            deleteGroup(groupId, groupName, function(){
                $(obj).remove();
            });
            return false;
        },
        
        deleteUserGroup: function(obj, id) {
            var tr = $(obj).parents('tr'),
                name = tr.find('td.name').find('a').html();
            
            showConfirm({
                msg: 'Bạn có chắc chắn muốn xoá nhóm người dùng <span class="text-danger">"' + name + '"</span> không?',
                title: 'Xóa nhóm người dùng',
                noBt: 'Đóng',
                yesBt: 'Đồng ý xoá',
                onYes: function() { 
                    $.post('/usergroup/ajax-delete-group', {id: id}, function(resp) {
                        if(resp.err == 0) {
                            tr.remove();
                            hideConfirm();
                        }
                    }, 'json');
                }
            });
        },
        
        editUser: function(obj, id) {
            var tr = $(obj).parents('tr'),
                title = tr.find('.name').html(),
                role = tr.find('.role').find('small').html().toLowerCase() == "admin" ? 1 : 0,
                html = '<form>\
                            <div class="form-group">\
                                <label for="editUser">Tên tài khoản:</label>\
                                <p class="form-control-static text-success">' + title + '</p>\
                            </div>\
                            <div class="form-group">\
                                <label for="editPass">Mật khẩu:</label>\
                                <input autocomplete="off" type="password" class="form-control" id="editPass" placeholder="Mật khẩu" value="">\
                            </div>\
                            <div class="form-group">\
                                <label for="editRePass">Nhập lạiMật khẩu:</label>\
                                <input autocomplete="off" type="password" class="form-control" id="editRePass" placeholder="Nhập lại Mật khẩu" value="">\
                            </div>\
                            <div class="form-group">\
                                <label for="editRole">Quyền:</label>\
                                <label class="radio-inline">\
                                    <input type="radio" ' + (role == 0 ? 'checked="checked"' : '') + ' value="0" name="editRole"> Người dùng\
                                </label>\
                                <label class="radio-inline">\
                                    <input type="radio" ' + (role == 1 ? 'checked="checked"' : '') + ' value="1" name="editRole"> Admin\
                                </label>\
                            </div>\
                            <p id="editUserHelpBlock" class="text-danger" style="display:none;"></p>\
                        </form>';
            showConfirm({
                title: 'Cập nhật tài khoản',
                msg: html,
                noBt: 'Đóng',
                yesBt: 'Cập nhật',
                onYes: function(uid) {
                    var ePass = $('#editPass').val(),
                        rePass = $('#editRePass').val(),
                        eRole = $('input:radio[name=editRole]:checked').val();
                    
                    $('#editUserHelpBlock').html('').hide();
                    if(ePass && ePass.length < 3) {
                        $('#editUserHelpBlock').show().html('Mật khẩu không hợp lệ.');
                        return false;
                    }
                    if(rePass != ePass) {
                        $('#editUserHelpBlock').show().html('Nhập lại Mật khẩu không khớp.');
                        return false;
                    }
                    
                    $.post('/user/ajax-edit-user', {
                        id: uid,
                        p: ePass,
                        r: eRole
                    }, function(resp) {
                        if(resp.err == 0) {
                            tr.find('.role').find('small').html(eRole == "0" ? "Người dùng" : "Admin");
                            hideConfirm();
                        } else {
                            $('#editUserHelpBlock').show().html(resp.msg);
                        }
                    }, 'json');
                    return false;
                },
                param: id
            });
        },
        
        editRole: function(obj, id) {
            var tr = $(obj).parents('tr'),
                name = tr.find('.name').html(),
                html = '<div id="userPermisList"></div>';
            showConfirm({
                title: 'Tài khoản: <span class="text-danger">' + name + '</span>',
                msg: html,
                afterShow: function() {
                    $.post('/user/ajax-get-access', {id: id}, function(resp) {
                        if(resp.err == 0 && resp.data) {
                            $('#userPermisList').html(resp.data);
                            initUserAccessHandler();
                        }
                    }, 'json');
                },
                onYes: function() {
                    var ePermiss = $('#userPermisList input:checkbox:checked');
                    var per = [];
                    $.each(ePermiss, function(i, item) {
                        per.push($(item).val());
                    });

                    $.post('/user/ajax-update-access', {
                        id: id,
                        permis: per.join(',')
                    }, function(resp) {
                        if(resp.err == 0) {
                            hideConfirm(); 
                       } else 
                            $('#editHelpBlock').html(resp.msg);
                    }, 'json');
                }
            });
        }
    };
})();